#include<bits/stdc++.h>
using namespace std;
const int& maxx=1000001;
struct node{
	int minn,l,r,ll,rr;
}t[4004000];
int T;
char op;
multiset<int> ll[1001000],rr[1001000],L,R;
int read()
{
	char nw=getchar();int ans=0;
	while(nw<'0'||nw>'9') nw=getchar();
	while(nw>='0'&&nw<='9') ans=(ans<<3)+(ans<<1)+(nw-'0'),nw=getchar();
	return ans;
}
void write(int x)
{
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
void push_up(int u)
{
	t[u].ll=max(t[u<<1].ll,t[u<<1|1].ll);
	t[u].rr=min(t[u<<1].rr,t[u<<1|1].rr);
	t[u].minn=min({t[u<<1].minn,t[u<<1|1].minn,t[u<<1|1].rr-t[u<<1].ll});
}
void build(int u,int l,int r)
{
	t[u].l=l,t[u].r=r;
	if(l==r) 
	{
		t[u].ll=-1e9,t[u].rr=1e9,t[u].minn=2*1e9;
		return ;
	}
	int mid=(l+r)>>1;
	build(u<<1,l,mid),build(u<<1|1,mid+1,r),push_up(u);
}
void updata(int u,int x)
{
	if(t[u].l==t[u].r)
	{
		if(!rr[t[u].l].empty()) t[u].rr=(*rr[t[u].l].begin());
		else t[u].rr=1e9;
		if(!ll[t[u].r].empty()) t[u].ll=(*ll[t[u].r].rbegin());
		else t[u].ll=-1e9;
		t[u].minn=t[u].rr-t[u].ll;
		return ;
	}
	int mid=(t[u].l+t[u].r)>>1;
	if(x<=mid) updata(u<<1,x);
	else updata(u<<1|1,x);
	push_up(u);
}

int main()
{
	freopen("stone.in","r",stdin);
	freopen("stone.out","w",stdout);
	T=read(),build(1,1,maxx);
	while(T--)
	{
		int l,r;
		op=getchar(),l=read(),r=read();
		if(op=='A')
		{
			ll[r].insert(l),rr[l].insert(r);
			L.insert(l),R.insert(r);
			updata(1,l),updata(1,r);
		}
		if(op=='R')
		{
			ll[r].erase(ll[r].find(l)),rr[l].erase(rr[l].find(r));
			L.erase(L.find(l)),R.erase(R.find(r));
			updata(1,l),updata(1,r);
		}
		if((*L.rbegin())<(*R.begin())) write((*rr[*L.rbegin()].begin())-(*ll[*R.begin()].rbegin())),puts("");
		else write(t[1].minn),puts("");
	}
}
